Motivation

For this project, we aim to examine state-level sociodemographic factors that may influence abortion rate. State family planning policies vary widely, with some states more hostile to women attempting to access an abortion, and others more supportive (Nash 2019). One study showed that of women who received a nonhospital abortion, 24% traveled at least 50 miles from their home to an abortion facility (Henshaw 1995). We plan to investigate the relationship between hostility towards abortion, within-county abortion provider access, and abortion rate. We are interested in visualizing these data to hopefully help disseminate this information in a digestible way to inform outreach/education strategies and policy.

Research Questions

We were mainly interested in addressing broadly the relationship between abortion access, hostility towards abortion, and abortion rates by state. Specifically:

  1. Is there a relationship between hostility towards abortion and access to abortion?
  2. Is there a relationship between hostility towards abortion and abortion rates by state?
  3. Is there a relationship between abortion access and abortion rates by state?
  4. Is there a relationship between both abortion access & hostility towards abortion with abortion rates by state?

Data Sources

The data are pulled from the Guttmacher Institute, which is a research organization founded in 1968 working to study, educate, and advance sexual and reproductive health and rights. The Guttmacher Institute Data Center provides public-access birth, abortion, and contraceptive use demographic data at the national and state levels, and contraceptive use data only at the county level. Since we are interested in multiple study outcomes—abortion rates, contraceptive funding/access, and teen birth rates—we pulled these data at the finest resolution possible, aggregated at the state level, for all 50 US States.

Exploratory Analysis

Loading, Cleaning, Tidying Data

We downloaded a .csv file from the Guttmacher Institute Data Center, choosing a broader range of different variables and outcomes of interest. We then selected our key variables of interest (see below) and created a contraceptive expenditure rate by state by taking the total reported public expenditures for family planning client services divided by the number of women who likely need public support for contraceptive services and supplies.

Data was available for each variable for all 50 states. We collated state hostility data from a publicly available .pdf on the Guttmacher Institute website and merged the datasets together.

The variables we are interested in are as follows:

VARIABLE NAME = Variable Description
state_id = State
percent_abortion = % of pregnancies ending in abortion
percent_women_no_provider = % of women aged 15-44 covered by Medicaid living in a county without an abortion provider
birthrate_15_19_state = Number of births per 1000 women aged 15-19 by state of residence (Teen Birth Rate)
need_bc_13_44 = Number of women who likely need public support for contraceptive services and supplies, aged 13-44
public_expenditures = Total reported public expenditures for family planning client services in 000s of dollars
expenditure_rate = “public_expenditures”/“need_bc_13_44”
hostility = State hostility ranking in 2000 according to Guttmacher

data = 
  read_csv("./data/112420_guttmacher data.csv")%>%
  select(state_id, measure_name, datum)%>%
  mutate(datum = as.double(datum))%>%
  pivot_wider(names_from = measure_name, values_from = datum)%>%
  janitor:: clean_names()%>%
  rename(public_expenditures = total_reported_public_expenditures_for_family_planning_client_services_in_000s_of_dollars,
         no_women_need_public_expenditure = no_of_women_who_likely_need_public_support_for_contraceptive_services_and_supplies_aged_13_44)%>%
  mutate(
    public_expenditures=as.double(public_expenditures),
    no_women_need_public_expenditure=as.double(no_women_need_public_expenditure),
    expenditure_rate = public_expenditures/no_women_need_public_expenditure
  )   #create expenditure_rate variable
hostility =
  read_csv("./data/state_hostility.csv")%>%
  separate('state_id,Hostility',c('state_id', 'hostility'), sep=",")%>%
  mutate(
    hostility = fct_relevel(hostility, c("hostile", "leans_hostile", "middle_ground", "leans_supportive", "supportive"))
  )
merge_data = 
  merge(data, hostility, by = "state_id")%>%
  select(-percent_of_pregnancies_wanted_later_or_unwanted_ending_in_abortion, -percent_of_pregnancies_wanted_later_or_unwanted_ending_in_birth
         )%>%
  rename(counties_no_provider = percent_of_counties_without_a_known_abortion_provider,
         percent_abortion = percent_of_pregnancies_ending_in_abortion,
         percent_birth = percent_of_pregnancies_ending_in_birth, 
         percent_medicaid = percent_of_women_aged_15_44_covered_by_medicaid,
         percent_women_no_provider = percent_of_women_aged_15_44_living_in_a_county_without_an_abortion_provider, 
         percent_uninsured = percent_of_women_aged_15_44_who_are_uninsured,
         percent_bc_18_49 = percent_of_women_aged_18_49_using_contraceptives,
         abortion_rate_15_17_state = abortion_rate_the_no_of_abortions_per_1_000_women_aged_15_17_by_state_of_residence,
         abortion_rate_15_19_state = abortion_rate_the_no_of_abortions_per_1_000_women_aged_15_19_by_state_of_residence,
         abortion_rate_15_44_state = abortion_rate_the_no_of_abortions_per_1_000_women_aged_15_44_by_state_of_residence,
         abortion_rate_18_19_state = abortion_rate_the_no_of_abortions_per_1_000_women_aged_18_19_by_state_of_residence,
         birthrate_15_17_state = birthrate_the_no_of_births_per_1_000_women_aged_15_17_by_state_of_residence,
         birthrate_15_19_state = birthrate_the_no_of_births_per_1_000_women_aged_15_19_by_state_of_residence,
         birthrate_18_19_state = birthrate_the_no_of_births_per_1_000_women_aged_18_19_by_state_of_residence,
         need_bc_hisp_20_44 = no_of_women_who_likely_need_public_support_for_contraceptive_services_and_supplies_hispanic_aged_20_44_and_below_250_percent_of_the_federal_poverty_level,
         need_bc_hisp_younger_20 = no_of_women_who_likely_need_public_support_for_contraceptive_services_and_supplies_hispanic_younger_than_20,
         need_bc_13_44 = no_women_need_public_expenditure,
         need_bc_black_20_44 = no_of_women_who_likely_need_public_support_for_contraceptive_services_and_supplies_non_hispanic_black_aged_20_44_and_below_250_percent_of_the_federal_poverty_level,
         need_bc_black_under_20 = no_of_women_who_likely_need_public_support_for_contraceptive_services_and_supplies_non_hispanic_black_younger_than_20, 
         need_bc_white_20_44 = no_of_women_who_likely_need_public_support_for_contraceptive_services_and_supplies_non_hispanic_white_aged_20_44_and_below_250_percent_of_the_federal_poverty_level,
         need_bc_white_under_20 = no_of_women_who_likely_need_public_support_for_contraceptive_services_and_supplies_non_hispanic_white_younger_than_20, 
         need_bc_under_20 = no_of_women_who_likely_need_public_support_for_contraceptive_services_and_supplies_younger_than_20,
         total_expend_abortion = total_reported_public_expenditures_for_abortions_in_000s_of_dollars
         )%>%
    separate('abortion_rate_15_19_state',c(NA, 'abortion_rate_15_19_state'), sep=",")%>%
    separate('abortion_rate_15_44_state',c(NA, 'abortion_rate_15_44_state'), sep=",")%>% 
  separate('birthrate_15_19_state',c(NA, 'birthrate_15_19_state'), sep=",")%>%
    mutate(
    abortion_rate_15_19_state = str_replace_all(abortion_rate_15_19_state, "\\)", ""),
    abortion_rate_15_44_state = str_replace_all(abortion_rate_15_44_state, "\\)", ""),
    birthrate_15_19_state = str_replace_all(birthrate_15_19_state, "\\)", "")
    )%>%
    mutate(
    abortion_rate_15_19_state = as.numeric(abortion_rate_15_19_state),
    abortion_rate_15_44_state = as.numeric(abortion_rate_15_44_state),
    birthrate_15_19_state = as.numeric(birthrate_15_19_state),
    counties_no_provider = as.numeric(counties_no_provider),
    percent_abortion = as.numeric(percent_abortion),
   percent_birth = as.numeric(percent_birth),
    percent_medicaid = as.numeric(percent_medicaid),
    percent_women_no_provider = as.numeric(percent_women_no_provider),
    percent_uninsured = as.numeric(percent_uninsured),
    percent_bc_18_49 = as.numeric(percent_bc_18_49),
    abortion_rate_15_17_state = as.numeric(abortion_rate_15_17_state),
    abortion_rate_15_19_state = as.numeric(abortion_rate_15_19_state),
    abortion_rate_18_19_state = as.numeric(abortion_rate_18_19_state),
    birthrate_15_17_state = as.numeric(birthrate_15_17_state),
     birthrate_18_19_state = as.numeric( birthrate_18_19_state),
    need_bc_hisp_20_44 = as.numeric(need_bc_hisp_20_44),
    need_bc_hisp_younger_20 = as.numeric(need_bc_hisp_younger_20),
     need_bc_black_20_44 = as.numeric( need_bc_black_20_44),
    need_bc_black_under_20 = as.numeric(need_bc_black_under_20),
   need_bc_white_20_44 = as.numeric(need_bc_white_20_44),
    need_bc_white_under_20 = as.numeric(need_bc_white_under_20),
    need_bc_under_20  = as.numeric(need_bc_under_20),
   total_expend_abortion  = as.numeric(total_expend_abortion)
    )
write_csv(merge_data, "./data/merge_data.csv")

Descriptive graphs

Figure 1. Scatterplot comparing abortion rates and public expenditure on contraceptives by state

Existing literature suggests state funding for abortions and family planning produced public health benefits, namely reducing unwanted pregnancies and thus lower abortion rate as well as better mother and infant health. We want to generate a plot to look at the relationship between public expenditure on family planning services including contraception for women in need and the rate of abortion. We divide the total reported public expenditures for family planning services by the number of women in reproductive age in each state to get the expenditure rate for each state, which may not be accurately reflective of each’s state demographic as well as the cost of abortion.

merge_data %>% 
  mutate(hostility = fct_relevel(hostility, c("hostile", "leans_hostile", "middle_ground", "leans_supportive", "supportive"))) %>% 
  mutate(text_label = str_c("State: ", state_id, "\nHostility: ", hostility)) %>%
  plot_ly(x = ~expenditure_rate, y = ~abortion_rate_15_44_state, type = "scatter", text = ~text_label, mode = "markers", color = ~hostility)

Spatial Visualizations

To create the maps of our relevant variables, we first read in a US state shapefile downloaded from the US Census Bureau. We then read in our tidied Guttmacher dataset, and did some additional tidying.

# import US state shapefile from data folder
all_states <- readOGR("data/cb_2018_us_state_500k/cb_2018_us_state_500k.shp")
## OGR data source with driver: ESRI Shapefile 
## Source: "/Users/rht2112/Documents/My Documents/Grad School/Coursework/Semester 3/Data Science I/Homeworks and Projects/p8105_2020_final/data/cb_2018_us_state_500k/cb_2018_us_state_500k.shp", layer: "cb_2018_us_state_500k"
## with 56 features
## It has 9 fields
## Integer64 fields read as strings:  ALAND AWATER
# read in project data
merge_data = read_csv("data/merge_data.csv") %>% 
  rename(STUSPS = state_id) %>% # to match shapefile column name 
  mutate_if(is.numeric, round, digits = 2) %>%  # round to 2 decimal places
  mutate(hostility = as.factor(hostility)) %>%
  mutate(hostility = fct_relevel(hostility, c("hostile", "leans_hostile", "middle_ground", "leans_supportive", "supportive"))) %>% # for mapping hostility as a categorical variable
  mutate(hostility = recode(hostility,
                            hostile = "Hostile",
                            leans_hostile = "Leans Hostile",
                            middle_ground = "Middle Ground",
                            leans_supportive = "Leans Supportive",
                            supportive = "Supportive")) # cleaner hostility names for map

We then joined the Guttmacher data to the shapefile.

data_sf <- merge(all_states, merge_data, all.x = F) 

We then created a universal basemap and for each map, we created a continuous-scale color palette.

Figure 2. Abortion Rates

# make color palette
abortion_rate_pal <- colorNumeric(
  palette = "inferno",
  domain = data_sf$percent_abortion,
  reverse = TRUE)

# base map
base_map <- leaflet(data_sf) %>%
  addProviderTiles("CartoDB.PositronNoLabels") 

# add in custom labels for percent abortion
labels_abortion_rate <- sprintf(
  "<strong>%s</strong><br/>%g&#37;",
  data_sf$STUSPS, data_sf$percent_abortion
) %>% lapply(htmltools::HTML)

# full map
abortion_map = base_map %>% 
  addPolygons(
  fillColor = ~abortion_rate_pal(data_sf$percent_abortion),
  weight = 2,
  opacity = 1,
  color = "white",
  dashArray = "3",
  fillOpacity = 0.7,
  highlight = highlightOptions(
    weight = 5,
    color = "#666",
    dashArray = "",
    fillOpacity = 0.7,
    bringToFront = TRUE),
  label = labels_abortion_rate,
  labelOptions = labelOptions(
    style = list("font-weight" = "normal", padding = "3px 8px"),
    textsize = "15px",
    direction = "auto")) %>% 
  addLegend(pal = abortion_rate_pal, values = ~percent_abortion, opacity = 0.7, title = 'Abortion Rates by State <br> (% of pregnancies ending in abortions)',
  position = "bottomright")
abortion_map

Figure 3. Public Contraceptive Expenditure Rates

# make color palette
bc_fund_pal <- colorNumeric(
  palette = "inferno",
  domain = data_sf$expenditure_rate,
  reverse = TRUE)

# add in custom labels for public contraceptive expenditure
labels_bc_fund <- sprintf(
  "<strong>%s</strong><br/>&#36;%g/woman",
  data_sf$STUSPS, data_sf$expenditure_rate
) %>% lapply(htmltools::HTML)

# full map
bc_fund_map = base_map %>% 
  addPolygons(
  fillColor = ~bc_fund_pal(data_sf$expenditure_rate),
  weight = 2,
  opacity = 1,
  color = "white",
  dashArray = "3",
  fillOpacity = 0.7,
  highlight = highlightOptions(
    weight = 5,
    color = "#666",
    dashArray = "",
    fillOpacity = 0.7,
    bringToFront = TRUE),
  label = labels_bc_fund,
  labelOptions = labelOptions(
    style = list("font-weight" = "normal", padding = "3px 8px"),
    textsize = "15px",
    direction = "auto")) %>% 
  addLegend(pal = bc_fund_pal, values = ~expenditure_rate, opacity = 0.7, title = 'Public Contraceptive Expenditure Rate by State  <br> ($/woman in likely need of publicly-funded services)',
  position = "bottomright")

bc_fund_map

Figure 4. Percent of Women Without Access to Abortion Provider in County of Residence

# make color palette
abortion_access_pal <- colorNumeric(
  palette = "inferno",
  domain = data_sf$percent_women_no_provider,
  reverse = TRUE)

# add in custom labels for public contraceptive expenditure
labels_abortion_access <- sprintf(
  "<strong>%s</strong><br/>%g&#37;",
  data_sf$STUSPS, data_sf$percent_women_no_provider
) %>% lapply(htmltools::HTML)

# full map
abortion_access_map = base_map %>% 
  addPolygons(
  fillColor = ~abortion_access_pal(data_sf$percent_women_no_provider),
  weight = 2,
  opacity = 1,
  color = "white",
  dashArray = "3",
  fillOpacity = 0.7,
  highlight = highlightOptions(
    weight = 5,
    color = "#666",
    dashArray = "",
    fillOpacity = 0.7,
    bringToFront = TRUE),
  label = labels_abortion_access,
  labelOptions = labelOptions(
    style = list("font-weight" = "normal", padding = "3px 8px"),
    textsize = "15px",
    direction = "auto")) %>% 
  addLegend(pal = abortion_access_pal, values = ~percent_women_no_provider, opacity = 0.7, title = 'Percent of women living in a county <br> without access to abortion clinic by State',
  position = "bottomright")

abortion_access_map

Figure 5. Teen Birth Rates

# make color palette
teen_births_pal <- colorNumeric(
  palette = "inferno",
  domain = data_sf$birthrate_15_19_state,
  reverse = TRUE)

# add in custom labels for public contraceptive expenditure
labels_teen_births <- sprintf(
  "<strong>%s</strong><br/> %g births per 1000 women",
  data_sf$STUSPS, data_sf$birthrate_15_19_state
) %>% lapply(htmltools::HTML)


# full map
teen_births_map = base_map %>% 
  addPolygons(
  fillColor = ~teen_births_pal(data_sf$birthrate_15_19_state),
  weight = 2,
  opacity = 1,
  color = "white",
  dashArray = "3",
  fillOpacity = 0.7,
  highlight = highlightOptions(
    weight = 5,
    color = "#666",
    dashArray = "",
    fillOpacity = 0.7,
    bringToFront = TRUE),
  label = labels_teen_births,
  labelOptions = labelOptions(
    style = list("font-weight" = "normal", padding = "3px 8px"),
    textsize = "15px",
    direction = "auto")) %>% 
  addLegend(pal = teen_births_pal, values = ~birthrate_15_19_state, opacity = 0.7, title = 'No. of births per 1000 women aged 15-19',
  position = "bottomright")

teen_births_map

Figure 6. Hostility toward Abortion Rights by State in 2010

# make color palette
hostility_pal <- colorFactor(
  palette = "inferno",
  domain = data_sf$hostility,
  reverse = F)

# add in custom labels for public contraceptive expenditure
labels_hostility <- sprintf(
  "<strong>%s</strong><br/>%s",
  data_sf$STUSPS, data_sf$hostility
) %>% lapply(htmltools::HTML)

# full map
hostility_map = base_map %>% 
  addPolygons(
  fillColor = ~hostility_pal(data_sf$hostility),
  weight = 2,
  opacity = 1,
  color = "white",
  dashArray = "3",
  fillOpacity = 0.7,
  highlight = highlightOptions(
    weight = 5,
    color = "#666",
    dashArray = "",
    fillOpacity = 0.7,
    bringToFront = TRUE),
  label = labels_hostility,
  labelOptions = labelOptions(
    style = list("font-weight" = "normal", padding = "3px 8px"),
    textsize = "15px",
    direction = "auto")) %>% 
  addLegend(pal = hostility_pal, 
            values = ~hostility, 
            opacity = 1, 
            title = 'Hostility Rating towards Abortion Rights in 2010',
  position = "bottomright")

hostility_map

ShinyApp for Maps

We also rendered an additional interactive shinyapp for the maps, viewable here.

Regression Models

We ran a few different linear regression analyses to round out our exploratory data analysis. The tables below summarizes the effect estimates we found for these models:

Table 1. Simple linear regression: Is there a relationship between hostility towards abortion and access to abortion?

# linear model
hostility_bc_access <- lm(percent_women_no_provider ~ hostility, data = merge_data) 

# table to visualize results
hostility_bc_access_tbl = hux(
  Outcome = c("Outcome", 
              "% Women Living in County w/o Provider", "", "", "", ""), 
  Predictors = c("Predictor", 
                 "Hostile (Intercept)", 
                 "Leans Hostile", 
                 "Middle Ground", 
                 "Leans Supportive", 
                 "Supportive"), 
  Estimate = c("Estimate", 
               hostility_bc_access$coefficients[1], 
               hostility_bc_access$coefficients[2],
               hostility_bc_access$coefficients[3],
               hostility_bc_access$coefficients[4],
               hostility_bc_access$coefficients[5]), 
  P_value = c("P-value", 
              summary(hostility_bc_access)$coefficients[,"Pr(>|t|)"][1], 
              summary(hostility_bc_access)$coefficients[,"Pr(>|t|)"][2],
              summary(hostility_bc_access)$coefficients[,"Pr(>|t|)"][3],
              summary(hostility_bc_access)$coefficients[,"Pr(>|t|)"][4],
              summary(hostility_bc_access)$coefficients[,"Pr(>|t|)"][5]),
  add_colnames = FALSE
)
hostility_bc_access_tbl %>% 
  set_bold(1, everywhere, TRUE) %>% 
  set_bottom_border(1, everywhere, 2) %>% 
  set_align(everywhere, 2, 'right') %>% 
  set_right_padding(10) %>% 
  set_left_padding(10) %>% 
  set_width(0.35) %>% 
  set_number_format(3)
OutcomePredictorEstimateP-value
% Women Living in County w/o ProviderHostile (Intercept)65.3000.000
Leans Hostile-14.0890.098
Middle Ground-35.9670.001
Leans Supportive-40.1000.000
Supportive-57.3000.001

Table 2. Simple linear regression: Is there a relationship between hostility towards abortion and abortion rates by state?

# linear model
hostility_model = lm(abortion_rate_15_44_state ~ hostility, data = merge_data) 

# table to visualize results
hostility_abortion_tbl = hux(
  Outcome = c("Outcome", 
              "Abortion Rate", "", "", "", ""), 
  Predictors = c("Predictor", 
                 "Hostile (Intercept)", 
                 "Leans Hostile", 
                 "Middle Ground", 
                 "Leans Supportive", 
                 "Supportive"), 
  Estimate = c("Estimate", 
               hostility_model$coefficients[1], 
               hostility_model$coefficients[2],
               hostility_model$coefficients[3],
               hostility_model$coefficients[4],
               hostility_model$coefficients[5]), 
  P_value = c("P-value", 
              summary(hostility_model)$coefficients[,"Pr(>|t|)"][1], 
              summary(hostility_model)$coefficients[,"Pr(>|t|)"][2],
              summary(hostility_model)$coefficients[,"Pr(>|t|)"][3],
              summary(hostility_model)$coefficients[,"Pr(>|t|)"][4],
              summary(hostility_model)$coefficients[,"Pr(>|t|)"][5]),
  add_colnames = FALSE
)
hostility_abortion_tbl %>% 
  set_bold(1, everywhere, TRUE) %>% 
  set_bottom_border(1, everywhere, 2) %>% 
  set_align(everywhere, 2, 'right') %>% 
  set_right_padding(10) %>% 
  set_left_padding(10) %>% 
  set_width(0.35) %>% 
  set_number_format(3)
OutcomePredictorEstimateP-value
Abortion RateHostile (Intercept)8.8700.000
Leans Hostile1.0460.596
Middle Ground3.9410.094
Leans Supportive5.1400.027
Supportive5.8300.140

Table 3. Simple linear regression: Is there a relationship between abortion access and abortion rates by state?

# linear model
bc_access_model <- lm(abortion_rate_15_44_state ~ percent_women_no_provider, data = merge_data) 


# table to visualize results
bc_access_abortion_tbl = hux(
  Outcome = c("Outcome", 
              "Abortion Rate"), 
  Predictors = c("Predictor", 
                 "% Women Living in County w/o Provider"), 
  Estimate = c("Estimate", 
               bc_access_model$coefficients[2]), 
  P_value = c("P-value", 
              summary(bc_access_model)$coefficients[,"Pr(>|t|)"][2]),
  add_colnames = FALSE
)
bc_access_abortion_tbl %>% 
  set_bold(1, everywhere, TRUE) %>% 
  set_bottom_border(1, everywhere, 2) %>% 
  set_align(everywhere, 2, 'right') %>% 
  set_right_padding(10) %>% 
  set_left_padding(10) %>% 
  set_width(0.35) %>% 
  set_number_format(3)
OutcomePredictorEstimateP-value
Abortion Rate% Women Living in County w/o Provider-0.1320.000

Table 4. Multivariate regression: Is there a relationship between abortion access and hostility towards abortion with abortion rates by state?

hostility_adj_model = lm(abortion_rate_15_44_state ~ hostility + percent_women_no_provider, data = merge_data)

# table to visualize results
hostility_bc_abortion_tbl = hux(
  Outcome = c("Outcome", 
              "Abortion Rate", 
              "", 
              "", 
              "", 
              "", 
              ""), 
  Predictors = c("Predictor", 
                 "Hostile (Intercept)", 
                 "Leans Hostile", 
                 "Middle Ground", 
                 "Leans Supportive", 
                 "Supportive",
                 "% Women Living in County w/o Provider"), 
  Estimate = c("Estimate", 
               hostility_adj_model$coefficients[1], 
               hostility_adj_model$coefficients[2],
               hostility_adj_model$coefficients[3],
               hostility_adj_model$coefficients[4],
               hostility_adj_model$coefficients[5],
               hostility_adj_model$coefficients[6]), 
  P_value = c("P-value", 
              summary(hostility_adj_model)$coefficients[,"Pr(>|t|)"][1], 
              summary(hostility_adj_model)$coefficients[,"Pr(>|t|)"][2],
              summary(hostility_adj_model)$coefficients[,"Pr(>|t|)"][3],
              summary(hostility_adj_model)$coefficients[,"Pr(>|t|)"][4],
              summary(hostility_adj_model)$coefficients[,"Pr(>|t|)"][5],
              summary(hostility_adj_model)$coefficients[,"Pr(>|t|)"][6]),
  add_colnames = FALSE
)
hostility_bc_abortion_tbl %>% 
  set_bold(1, everywhere, TRUE) %>% 
  set_bottom_border(1, everywhere, 2) %>% 
  set_align(everywhere, 2, 'right') %>% 
  set_right_padding(10) %>% 
  set_left_padding(10) %>% 
  set_width(0.35) %>% 
  set_number_format(3)
OutcomePredictorEstimateP-value
Abortion RateHostile (Intercept)17.8770.000
Leans Hostile-0.8980.589
Middle Ground-1.0200.637
Leans Supportive-0.3910.857
Supportive-2.0740.565
% Women Living in County w/o Provider-0.1380.000

Discussion and Conclusion

Contrary to our initial hypothesis, hostility does not appear to be a significant predictor for abortion rates, particularly once adjusted for access to abortion provider. Access to abortion provider appears to be the most significant predictor of abortion rates at the state level, with around a -0.13% percent change in women living in a county without access to a provider associated with a 1% increase in abortion rates (Tables 2 and 4). In other words, a 0.13% increase in women living in county with access to a provider is associated with a 1% increase in abortion rates at the state level. However, hostility does seem to be a significant predictor for access to abortion provider, suggesting that there is a potential underlying relationship between the three variables.

We present descriptive statistics and visualizations about abortion rate, geographic access to abortion, political hostility to abortion, state expenditure for contraception, and teen birth rate, but we are only providing results from regression models examining the relationships between abortion rate, geographic access to abortion, and political hostility to abortion. While we initially built linear regression models for several other theoretically plausible relationships, (e.g. teen birth rate and state expenditure for contraception), we chose to only report results for models with fit statistics that suggested that the model was meaningful. To determine model fit, we used an F-statistic and set our threshold to the 10% level of significance.

This is an exploratory analyses of abortion rates and its relationship to abortion access, hostility, and other related factors in the United States. Overall, our results show that there is heterogeneity at the state level for abortion rates, public funding for contraceptives, teen birth rates, and abortion access. Future studies could explore how age, race, education, socioeconomic status, religion, or insurance status affect abortion rates by state. Collection of individual level data on distance travelled to obtain an abortion, gestational age at time of abortion, or other covariates related to access would provide us with a greater understanding of who seeks an abortion.